package com.song.tools.mvc.validator;

import com.song.tools.core.util.ObjectUtils;

import java.util.function.Supplier;

/**
 * 非null参数校验器<br>
 * 校验一个对象是否为空（包含数组，字符串，集合，map，optional）
 *
 * @author song tools
 * @since 2024-06-21
 */
public record NotNullValidator(String paramName) implements ParamValidator<Object> {

    /**
     * 执行参数校验
     *
     * @param paramValueSupplier 参数值supplier
     * @return 校验结果，包含是否通过及失败原因
     */
    @Override
    public ValidationResult validate(Supplier<Object> paramValueSupplier) {
        Object paramValue = paramValueSupplier.get();
        if (ObjectUtils.isEmpty(paramValue)) {
            return new ValidationResult(false, getDefaultErrorMessage());
        }

        return new ValidationResult(true, null);
    }

    @Override
    public String getDefaultErrorMessage() {
        return paramName + " must not be null";
    }
}
